package pw_coding

import "fmt"

// Go语言生成器
type GoGener struct{}

// 标识
func (g *GoGener) Language() string {
	return "go"
}

// 后缀
func (g *GoGener) Suffix() string {
	return ".go"
}

// 模板标识
func (g *GoGener) TplCode() string {
	return "TEMPLE_GO_STRUCT"
}

// 字段类型转化器
func (g *GoGener) DataTypeMap(datatype string, cannull bool) string {
	if cannull {
		if v, ok := MysqlNull2GoMap[datatype]; ok {
			return v
		} else {
			return datatype
		}
	} else {
		if v, ok := Mysql2GoMap[datatype]; ok {
			return v
		} else {
			return datatype
		}
	}
}

// 生成器
func (g *GoGener) Coding(p *CmdParam) {
	switch p.GenType {
	case "d":
		g.CodingFromDb(p)
		break
	case "m":
		g.CodingModule(p)
		break
	case "f":
		g.CodingFile(p)
		break
	default:
		g.CodingFromDb(p)
		break
	}
}
func (g *GoGener) CodingFromDb(p *CmdParam) {
	es := PumpFromMysql(p, g.DataTypeMap)
	f := entities2Module(es, g.Suffix(), g.TplCode(), p.Code)
	f.Create()
}
func (g *GoGener) CodingFile(p *CmdParam) {
	fmt.Println("golang file create ...")
	e := New_LangGO_Type_ByCode(p.Code)
	Gen(e)
}
func (g *GoGener) CodingModule(p *CmdParam) {
	panic("没有实现")
}
